<?php

namespace System\library\safety;

use System\library\Http;
use System\library\Session;

/**
 * <b>Class</b> :        AntiBadBot<br>
 * <b>Fonction</b> :     Anti aspirateur
 * <br>
 * @version              1.0
 * @author               Dread <dreadlokeur@gmail.com>
 * @license              Licence publique générale GNU http://www.gnu.org/licenses/gpl.html
 * @copyright            Copyright 2011 - MidichloriansPHP and contributors
 * @package              System
 * @subpackage           library\safety
 */
class AntiBadBot {

    public function __construct() {
        if(Http::getQuery('trap') == 'yes'){
            $session = Session::getInstance();
            $session->addVariable('isBot', true);
        }
    }

    /**
     * Permet de rediriger un aspirateur de site, et de laisser une trace dans les log
     *
     * @access public
     * @static
     * @param <void>
     * @return <void>
     *
     * @see Config
     * @see Logger
     * @see Utils
     */
    public static function stopBadBot() {
        //Si un robot detect le lien piège, il va aller dessus, donc on assimile true à la session isBot
        if (isset($_GET['trap']) && $_GET['trap'] == 'yes') {
            if (!isset($_SESSION))
                session_start();

            $_SESSION['isBot'] = true;
        }
        //On regarde si le HTTP_USER_AGENT est un aspirateur, en fonction de la liste xml établie
        if (file_exists(Config::getCons('PATH_CONFIG') . 'filters/website_copier.xml')) {
            $ip = Utils::getUserIp();
            $xml = simplexml_load_file(Config::getCons('PATH_CONFIG') . 'filters/website_copier.xml');
            for ($i = 0; $i < count($xml->badbot); $i++) {
                if (strripos($xml->badbot[$i], $_SERVER['HTTP_USER_AGENT']) !== false) {
                    //On log
                    if (Config::isDefinedCons('LOG_BADBOT') && Config::getCons('LOG_BADBOT'))
                        Logger::toLogBadBot($ip, gethostbyaddr($ip), false);
                    //Et on redirige
                    Utils::redirect(Config::getCons('PATH_VIEW_ERROR') . 'bad_bot.' . Config::getCons('TEMPLATE_EXTENSION'));
                }
            }
        }
        //On regarde si un robot est tombé dans le piège à robot
        if (isset($_SESSION['isBot'])) {
            //On regarde si c'est un moteur de recherche définit dans la liste xml
            if (file_exists(Config::getCons('PATH_CONFIG') . 'filters/search_engine.xml')) {
                $ip = Utils::getUserIp();
                $xml = simplexml_load_file(Config::getCons('PATH_CONFIG') . 'filters/search_engine.xml');
                for ($i = 0; $i < count($xml->goodbot); $i++) {
                    if ($ip == $xml->goodbot[$i])
                        $is_goodbot = true;
                    break;
                }
                //Si ce n'est pas un moteur de recherche définit dans la liste
                if (!isset($is_goodbot)) {
                    //On log, ce n'est peut être pas un aspirateur, mais un moteur de recherche qui ne figure pas encore dans la liste
                    if (Config::isDefinedCons('LOG_BADBOT') && Config::getCons('LOG_BADBOT'))
                        Logger::toLogBadBot($ip, gethostbyaddr($ip), true);
                    //Et on redirige
                    Utils::redirect(Config::getCons('PATH_VIEW_ERROR') . 'bad_bot.' . Config::getCons('TEMPLATE_EXTENSION'));
                }
            }
        }
    }

}

?>
